本次实验是基于OVS的VLAN虚拟化简易实践方案的进一步的实验,采用RYU restful api进行配置。本质上和上次实验没什么差,究其原因还是因为上次不能较好使用RYU的restful api,现在学会了就实践一把吧。
工具
之前的实验步骤不在赘述,主要是用RYU的restful api下发push_vlan
ACTION
tip:记得一定要大写
Actions | Description | Example |
---|---|---|
OUTPUT | Output packet from “port” | {“type”: “OUTPUT”, “port”: 3} |
COPY_TTL_OUT | Copy TTL outwards | {“type”: “COPY_TTL_OUT”} |
COPY_TTL_IN | Copy TTL inwards | {“type”: “COPY_TTL_IN”} |
SET_MPLS_TTL | Set MPLS TTL using “mpls_ttl” | {“type”: “SET_MPLS_TTL”, “mpls_ttl”: 64} |
DEC_MPLS_TTL | Decrement MPLS TTL | {“type”: “DEC_MPLS_TTL”} |
PUSH_VLAN | Push a new VLAN tag with “ethertype” | {“type”: “PUSH_VLAN”, “ethertype”: 33024} |
POP_VLAN | Pop the outer VLAN tag | {“type”: “POP_VLAN”} |
PUSH_MPLS | Push a new MPLS tag with “ethertype” | {“type”: “PUSH_MPLS”, “ethertype”: 34887} |
POP_MPLS | Pop the outer MPLS tag with “ethertype” | {“type”: “POP_MPLS”, “ethertype”: 2054} |
SET_QUEUE | Set queue id using “queue_id” when outputting to a port | {“type”: “SET_QUEUE”, “queue_id”: 7} |
GROUP | Apply group identified by “group_id” | {“type”: “GROUP”, “group_id”: 5} |
SET_NW_TTL | Set IP TTL using “nw_ttl” | {“type”: “SET_NW_TTL”, “nw_ttl”: 64} |
DEC_NW_TTL | Decrement IP TTL | {“type”: “DEC_NW_TTL”} |
SET_FIELD | Set a “field” using “value”(The set of keywords available for “field” is the same as match field) | See Example of set-field action |
PUSH_PBB | Push a new PBB service tag with “ethertype”(Openflow1.3+) | {“type”: “PUSH_PBB”, “ethertype”: 35047} |
POP_PBB | Pop the outer PBB service tag(Openflow1.3+) | {“type”: “POP_PBB”} |
COPY_FIELD | Copy value between header and register(Openflow1.5+) | {“type”: “COPY_FIELD”, “n_bits”: 32, “src_offset”: 1, “dst_offset”: 2, “src_oxm_id”: “eth_src”, “dst_oxm_id”: “eth_dst”} |
METER | Apply meter identified by “meter_id”(Openflow1.5+) | {“type”: “METER”, “meter_id”: 3} |
EXPERIMENTER | Extensible action for the experimenter(Set “base64” or “ascii” to “data_type” field) | {“type”: “EXPERIMENTER”, “experimenter”: 101, “data”: “AAECAwQFBgc=”, “data_type”: “base64”} |
GOTO_TABLE | (Instruction) Setup the next table identified by “table_id” | {“type”: “GOTO_TABLE”, “table_id”: 8} |
WRITE_METADATA | (Instruction) Setup the metadata field using “metadata” and “metadata_mask” | {“type”: “WRITE_METADATA”, “metadata”: 0x3, “metadata_mask”: 0x3} |
METER | (Instruction) Apply meter identified by “meter_id”(deprecated in Openflow1.5) | {“type”: “METER”, “meter_id”: 3} |
WRITE_ACTIONS | (Instruction) Write the action(s) onto the datapath action set | {“type”: “WRITE_ACTIONS”, actions”:[{“type”:”POP_VLAN”,},{ “type”:”OUTPUT”, “port”: 2}]} |
CLEAR_ACTIONS | (Instruction) Clears all actions from the datapath action set |
Example of set-field action
|
postman
ovs
|
得到结果
|
可以基于此写自动化脚本,不过还是有通过restful api层面,感觉还不是太好。下面搞一个不通过restful api层面的下发过程。